﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;


namespace CMS_GYM.UserInterface
{
    public partial class ucQLDanhMucDinhKhoanNo : UserControl
    {
        #region Khai báo biến toàn cục
        private int _TAI_KHOAN_NO;
        private DataTable _DinhKhoanNo;
        private CMS_DinhKhoan _DinhKhoanBLC;
        #endregion

        public ucQLDanhMucDinhKhoanNo()
        {
            InitializeComponent();
            try
            {
                gvDinhKhoanNo.AutoGenerateColumns = false;
            }
            catch (Exception ex)
            {
            }
        }

        private void ucQLDanhMucDinhKhoanNo_Load(object sender, EventArgs e)
        {
            try
            {
                //InitComboHinhThucThanhToan();

                //this._DinhKhoanBLC = new CMS_DinhKhoan();
                //this._DinhKhoanNo = this._DinhKhoanBLC.GetDinhKhoangNo();
                //BinhDanhSachDinhKhoan(string.Empty);
                //txtTaiKhoanNo.Focus();
                SetPermission();
            }
            catch (Exception ex)
            { }
        }

        private void SetPermission()
        {
            btnAddNew.Enabled = clsUser.LayThongTinPhanQuyen("DanhMucDinhKhoan").ChucNang.Them;
            btnSave.Enabled = clsUser.LayThongTinPhanQuyen("DanhMucDinhKhoan").ChucNang.Sua;
            btnDelete.Enabled = clsUser.LayThongTinPhanQuyen("DanhMucDinhKhoan").ChucNang.Xoa;
        }

        public void LoadData()
        {
            InitComboHinhThucThanhToan();
            this._DinhKhoanBLC = new CMS_DinhKhoan();
            this._DinhKhoanNo = this._DinhKhoanBLC.GetDinhKhoangNo();
            BinhDanhSachDinhKhoan(string.Empty);
            txtTaiKhoanNo.Focus();
        }

        private void InitComboHinhThucThanhToan()
        {
            List<DataItem> listItem = new List<DataItem>();
            listItem.Add(new DataItem("Tiền mặt", "1"));
            listItem.Add(new DataItem("Chuyển khoản", "2"));
            listItem.Add(new DataItem("Khác", ""));
            cmbHinhThucThanhToan.DisplayMember = "Name";
            cmbHinhThucThanhToan.ValueMember = "Value";
            cmbHinhThucThanhToan.DataSource = listItem;
            cmbHinhThucThanhToan.SelectedValue = "1";
        }

        private void BinhDanhSachDinhKhoan(string tukhoa)
        {
            try
            {
                this.gvDinhKhoanNo.DataSource = null;
                this.ResetForm();
                string filter = string.Empty;
                tukhoa = tukhoa.Replace("'", "♥");
                if (!string.IsNullOrEmpty(tukhoa))
                {
                    filter += string.Format("TAI_KHOAN_NO LIKE '%{0}%' OR TEN_TAI_KHOAN_NO LIKE '%{0}%'", tukhoa.Trim());
                }

                if (string.IsNullOrEmpty(filter)) filter = " 1=1";

                DataView dtView = this._DinhKhoanNo.DefaultView;
                dtView.RowFilter = filter;
                dtView.Sort = "TAI_KHOAN_NO,TEN_TAI_KHOAN_NO";
                this.gvDinhKhoanNo.DataSource = dtView.ToTable();

                InitColumsSTT(this.gvDinhKhoanNo);
            }
            catch (Exception ex)
            { }
        }

        private void BindChiTietDinhKhoanNo(int DINH_KHOAN_NO)
        {
            try
            {
                DINH_KHOAN_NO dkEntity = this._DinhKhoanBLC.GetChiTietDinhKhoanNo(DINH_KHOAN_NO);
                if (dkEntity != null)
                {
                    this._TAI_KHOAN_NO = DINH_KHOAN_NO;
                    txtTaiKhoanNo.Text = dkEntity.TAI_KHOAN_NO.ToString();
                    txtTenTaiKhoanNo.Text = dkEntity.TEN_TAI_KHOAN_NO;
                    cmbHinhThucThanhToan.SelectedValue = dkEntity.HINH_THUC_THANH_TOAN;
                    chkHieuLucThuTien.Checked = dkEntity.HIEULUC_THUTIEN == 1;
                    txtGhiChu.Text = dkEntity.GHI_CHU;

                    txtTaiKhoanNo.Enabled = false;
                    cmbHinhThucThanhToan.Enabled = false;
                    //txtTenTaiKhoanNo.Focus();
                }
            }
            catch (Exception ex)
            { }
        }

        private void InitColumsSTT(DataGridView gridView)
        {
            if (gridView == null) return;
            try
            {
                int stt = 1;
                DataGridViewRowCollection rows = gridView.Rows;
                foreach (DataGridViewRow row in rows)
                {
                    row.Cells["STTNo"].Value = stt;
                    stt++;
                }
            }
            catch (System.Exception ex)
            {
            }
        }

        private void DataGridViewSetSelected(DataGridView gridView, string columName, string columValue)
        {
            try
            {
                if (gridView != null && gridView.Rows.Count > 0)
                {
                    DataGridViewRowCollection rows = gridView.Rows;
                    foreach (DataGridViewRow row in rows)
                    {
                        string id = row.Cells[columName].Value.ToString();
                        if (id == columValue)
                        {
                            row.Selected = true;
                            int rowIndex = row.Index;
                            gridView.FirstDisplayedCell = row.Cells[columName];
                            gridView.FirstDisplayedScrollingRowIndex = rowIndex;
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            { }
        }

        private void ResetForm()
        {
            try
            {
                this._TAI_KHOAN_NO = 0;
                txtTaiKhoanNo.Text = string.Empty;
                txtTenTaiKhoanNo.Text = string.Empty;
                chkHieuLucThuTien.Checked = false;
                txtGhiChu.Text = string.Empty;
                txtTaiKhoanNo.Focus();
                txtTaiKhoanNo.Enabled = true;
                cmbHinhThucThanhToan.Enabled = true;
            }
            catch (Exception ex)
            { }
        }

        private bool IsValidate()
        {
            bool result = true;
            try
            {
                if (string.IsNullOrEmpty(txtTaiKhoanNo.Text))
                {
                    result = false;
                    MessageBox.Show("Vui lòng nhập tài khoản nợ.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtTaiKhoanNo.Focus();
                    goto ERROR;
                }

                if (this._DinhKhoanBLC.GetChiTietDinhKhoanNo(int.Parse(txtTaiKhoanNo.Text)) != null)
                {
                    result = false;
                    MessageBox.Show(string.Format("Tài khoản nợ ({0}) đã tồn tại.Vui lòng kiểm tra lại.", txtTaiKhoanNo.Text), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtTaiKhoanNo.Focus();
                    goto ERROR;
                }
            }
            catch (Exception ex)
            {
                result = false;
            }

        ERROR: { }
            return result;
        }

        private bool IsValidateDelete()
        {
            bool result = true;
            try
            {
                if (string.IsNullOrEmpty(txtTaiKhoanNo.Text))
                {
                    result = false;
                    MessageBox.Show("Vui lòng nhập tài khoản nợ.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtTaiKhoanNo.Focus();
                    goto ERROR;
                }
            }
            catch (Exception ex)
            {
                result = false;
            }

        ERROR: { }
            return result;
        }

        #region Events

        private void OnKeyPress(object sender, KeyPressEventArgs e)
        {
            if (Utils.OnKyPress_IsNumber(e.KeyChar)) { e.Handled = true; }
        }


        private void btnAddNew_Click(object sender, EventArgs e)
        {
            ResetForm();
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            if (this._TAI_KHOAN_NO < 1)
            {
                ResetForm();
            }
            else
            {
                this.BindChiTietDinhKhoanNo(this._TAI_KHOAN_NO);
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (!this.IsValidate()) return;

                DINH_KHOAN_NO ett = new DINH_KHOAN_NO();
                ett.TAI_KHOAN_NO = int.Parse(txtTaiKhoanNo.Text);
                ett.TEN_TAI_KHOAN_NO = txtTenTaiKhoanNo.Text;
                ett.HINH_THUC_THANH_TOAN = cmbHinhThucThanhToan.SelectedValue.ToString();
                ett.HIEULUC_THUTIEN = chkHieuLucThuTien.Checked ? 1 : 0;
                ett.GHI_CHU = txtGhiChu.Text;

                if (this._TAI_KHOAN_NO < 1)
                {
                    if (this._DinhKhoanBLC.InsertDinhKhoanNo(ett))
                    {
                        MessageBox.Show("Thêm mới định khoản nợ thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this._DinhKhoanNo = this._DinhKhoanBLC.GetDinhKhoangNo();
                        this.BinhDanhSachDinhKhoan(string.Empty);
                        this.DataGridViewSetSelected(this.gvDinhKhoanNo, "TAI_KHOAN_NO", ett.TAI_KHOAN_NO.ToString());
                        this.BindChiTietDinhKhoanNo(ett.TAI_KHOAN_NO);
                    }
                    else
                    {
                        MessageBox.Show("Thêm mới định khoản nợ không thành công. Vui lòng thử lại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    if (this._DinhKhoanBLC.UpdateDinhKhoanNo(ett))
                    {
                        MessageBox.Show("Cập nhật thông tin định khoản nợ thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this._DinhKhoanNo = this._DinhKhoanBLC.GetDinhKhoangNo();
                        this.BinhDanhSachDinhKhoan(string.Empty);
                        this.DataGridViewSetSelected(this.gvDinhKhoanNo, "TAI_KHOAN_NO", ett.TAI_KHOAN_NO.ToString());
                        this.BindChiTietDinhKhoanNo(ett.TAI_KHOAN_NO);
                    }
                    else
                    {
                        MessageBox.Show("Cập nhật thông tin định khoản nợ không thành công. Vui lòng thử lại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception ex)
            { }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (!this.IsValidateDelete()) return;
                DialogResult result = MessageBox.Show("Bạn có thật sự muốn xóa tài khoản nợ hay không?", "Xác nhận thông tin", MessageBoxButtons.YesNo);
                if (result == DialogResult.No)
                {
                    return;
                }
                DINH_KHOAN_NO ett = new DINH_KHOAN_NO();
                ett.TAI_KHOAN_NO = int.Parse(txtTaiKhoanNo.Text);
                ett.TEN_TAI_KHOAN_NO = txtTenTaiKhoanNo.Text;
                ett.HINH_THUC_THANH_TOAN = cmbHinhThucThanhToan.SelectedValue.ToString();
                ett.HIEULUC_THUTIEN = chkHieuLucThuTien.Checked ? 1 : 0;
                ett.GHI_CHU = txtGhiChu.Text;

                if (this._DinhKhoanBLC.DeleteDinhKhoanNo(ett))
                {
                    MessageBox.Show("Xóa thông tin định khoản nợ thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this._DinhKhoanNo = this._DinhKhoanBLC.GetDinhKhoangNo();
                    this.BinhDanhSachDinhKhoan(string.Empty);
                }
                else
                {
                    MessageBox.Show("Xóa thông tin định khoản nợ không thành công. Vui lòng thử lại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            { }

        }


        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            this.BinhDanhSachDinhKhoan(txtTuKhoa.Text);
        }

        private void txtTuKhoa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13) btnTimKiem_Click(sender, e);
        }

        private void btnExport_Click(object sender, EventArgs e)
        {
            if (this.gvDinhKhoanNo.DataSource != null)
            {

            }
            else
            {
                MessageBox.Show("Không có giữ liệu.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void gvDinhKhoanNo_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (gvDinhKhoanNo.CurrentRow != null && gvDinhKhoanNo.CurrentRow.DataBoundItem != null)
                {
                    DataRowView row = (DataRowView)gvDinhKhoanNo.CurrentRow.DataBoundItem;
                    if (row != null && row["TAI_KHOAN_NO"] != null)
                    {
                        BindChiTietDinhKhoanNo(int.Parse(row["TAI_KHOAN_NO"].ToString()));
                    }
                }
            }
            catch (Exception ex)
            { }
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool bKetQua = false;
            try
            {
                //////su ly phim enter nhay tab
                //if (keyData == Keys.Enter)
                //{
                //    DataAccess.Support.HandleEnterKeydown(this, new KeyEventArgs(Keys.Enter));
                //}
                //Nhấn phím Ctrl + S: Thêm mới, sửa
                //else 
                if (keyData == (Keys.Control | Keys.S) && (btnSave.Enabled))
                {
                    //Gợi sự kiện lưu
                    if (btnSave.Enabled)
                    {
                        btnSave_Click(btnSave, new EventArgs());
                    }
                    else
                    {
                        MessageBox.Show("Bạn không có quyền thực hiện chức năng này.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else if (keyData == (Keys.Control | Keys.D) && (btnDelete.Enabled))
                {
                    if (btnDelete.Enabled)
                    {
                        //Gọi sự kiện thêm mới
                        btnDelete_Click(btnDelete, new EventArgs());
                    }
                    else
                    {
                        MessageBox.Show("Bạn không có quyền thực hiện chức năng này.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                //Nhấn phím Ctrl + N: thêm mới khuyến mãi
                else if (keyData == (Keys.Control | Keys.N) && (btnAddNew.Enabled))
                {
                    if (btnAddNew.Enabled)
                    {
                        //Gọi sự kiện thêm mới
                        btnAddNew_Click(btnAddNew, new EventArgs());
                    }
                    else
                    {
                        MessageBox.Show("Bạn không có quyền thực hiện chức năng này.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                //Nhấn phím Ctrl + R: nhập lại
                else if (keyData == (Keys.Control | Keys.R) && (btnReset.Enabled))
                {
                    //Gọi sự kiện nhập lại
                    btnReset_Click(btnAddNew, new EventArgs());
                }
                else
                    bKetQua = base.ProcessCmdKey(ref msg, keyData);
            }
            catch (Exception) { }

            return bKetQua;
        }

        #endregion

      

    }
}
